﻿; (function ($, window, document, undefined) {
    var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];    // 加权因子   
    var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];            // 身份证验证位值.10代表X   
    /**  
 * 判断身份证号码为18位时最后的验证位是否正确  
 * @param a_idCard 身份证号码数组  
 * @return  
 */
    function isTrueValidateCodeBy18IdCard(a_idCard) {
        var sum = 0;                           // 声明加权求和变量  
        var code = 0;
        if (a_idCard[17].toLowerCase() == 'x') {
            code = 10;                    // 将最后位为x的验证码替换为10方便后续操作   
        } else {
            code = a_idCard[17];
        }
        for (var i = 0; i < 17; i++) {
            sum += Wi[i] * a_idCard[i];            // 加权求和   
        }
        valCodePosition = sum % 11;                // 得到验证码所位置   
        if (code == ValideCode[valCodePosition]) {
            return true;
        } else {
            return false;
        }
    }
    /**  
      * 验证18位数身份证号码中的生日是否是有效生日  
      * @param idCard 18位书身份证字符串  
      * @return  
      */
    function isValidityBrithBy18IdCard(idCard18) {
        var year = idCard18.substring(6, 10);
        var month = idCard18.substring(10, 12);
        var day = idCard18.substring(12, 14);
        var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
        // 这里用getFullYear()获取年份，避免千年虫问题   
        if (temp_date.getFullYear() != parseFloat(year)
              || temp_date.getMonth() != parseFloat(month) - 1
              || temp_date.getDate() != parseFloat(day)) {
            return false;
        } else {
            return true;
        }
    }
    //去掉字符串头尾空格   
    function trim(str) {
        return str.replace(/(^\s*)|(\s*$)/g, "");
    }
    $.extend({
        //验证身份证号码
        isIdCard: function (idCard) {
            idCard = trim(idCard.replace(/ /g, ""));               //去掉字符串头尾空格                     
            if (idCard.length == 18) {
                var a_idCard = idCard.split("");                // 得到身份证数组   
                if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) {   //进行18位身份证的基本验证和第18位的验证
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        },
        //验证手机号码
        isPhoneNo: function (phoneNo) {
            var patrn = /\d{6}|\d{13}/;
            if (patrn.test(phoneNo)) {
                return true;
            } else {
                return false;
            }
        },
        //验证邮箱
        isEmail: function (email) {
            var patrn = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;
            if (patrn.test(email)) {
                return true;
            } else {
                return false;
            }
        }
    });
})(jQuery, window, document);

